package com.example.codediff.model;

import lombok.Data;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * 调用链分析结果
 * 包含所有变更点及其对应的调用链
 */
@Data
public class CallChainResult {
    /**
     * 变更点列表
     */
    private List<String> modifiedPoints = new ArrayList<>();

    /**
     * 每个变更点对应的调用链列表
     * Key: 变更点的完整类名.方法名
     * Value: 到达该变更点的所有调用路径
     */
    private Map<String, List<CallPath>> callChains = new HashMap<>();

    /**
     * 添加一个变更点的调用链
     */
    public void addCallChains(String modifiedPoint, List<CallPath> chains) {
        if (!modifiedPoints.contains(modifiedPoint)) {
            modifiedPoints.add(modifiedPoint);
        }
        callChains.put(modifiedPoint, chains);
    }

    /**
     * 获取指定变更点的所有调用链
     */
    public List<CallPath> getCallChains(String modifiedPoint) {
        return callChains.getOrDefault(modifiedPoint, new ArrayList<>());
    }

    /**
     * 获取调用链的总数
     */
    public int getTotalCallChains() {
        return callChains.values().stream()
                .mapToInt(List::size)
                .sum();
    }
}
